package com.koron.rating.rating.mapper;

import com.koron.rating.classify.bean.RatingUnitBean;
import com.koron.rating.rating.bean.*;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * @Author: rocky
 * @Date: 2022/1/11 9:54
 */
public interface RatingUnitHistoryMapper {
    int deleteByPrimaryKey(String id);

    int insert(RatingUnitHistoryBean record);

    int insertOrUpdate(RatingUnitHistoryBean record);

    int insertOrUpdateSelective(RatingUnitHistoryBean record);

    int insertSelective(RatingUnitHistoryBean record);

    RatingUnitHistoryBean selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(RatingUnitHistoryBean record);

    int updateByPrimaryKey(RatingUnitHistoryBean record);

    int updateBatch(List<RatingUnitHistoryBean> list);

    int updateBatchSelective(@Param("orderId")String orderId, @Param("list")List<RatingUnitHistoryBean> list);

    int batchInsert(@Param("list") List<RatingUnitHistoryBean> list);

    /**
     * 根据评级单找历史记录
     * @param orderId
     * @return
     */
    List<RatingUnitHistoryBean> queryByOrderId(@Param("orderId")String orderId);

    /**
     * 根据评级单找历史记录
     * @param orderId
     * @param unitTypeCollection
     * @return
     */
    List<RatingUnitHistoryBean> queryByOrderIdAndUnitTypeIn(@Param("orderId")String orderId,@Param("unitTypeCollection")Collection<String> unitTypeCollection);

    /**
     * 获取对应id 的历史单元划分
     *
     * @param orderId
     * @return
     */
    List<RatingUnitBean> queryAllByOrderId(@Param("orderId") String orderId);

    /**
     * 判断评级单是否有同步过信息
     *
     * @param orderId
     * @return
     */
    Integer countByOrderId(@Param("orderId") String orderId);

    /**
     * 根据 单元划分id 批量删除记录
     *
     * @param orderId
     * @param list
     * @return
     */
    int deleteInId(@Param("orderId") String orderId, @Param("list") List<String> list);

    /**
     * 更新评级
     *
     * @param updatedNowGrade
     * @param id
     * @return
     */
    int updateBeforGradeAndNowGradeById(@Param("updatedBeforGrade") Integer updatedBeforGrade, @Param("updatedNowGrade") Integer updatedNowGrade, @Param("id") String id);

    /**
     * 更新评级留言
     *
     * @param updatedGradeRemarks
     * @param id
     * @return
     */
    int updateGradeRemarksById(@Param("updatedGradeRemarks") String updatedGradeRemarks, @Param("id") String id);

    /**
     * 评级单id、单位id 过滤记录
     *
     * @param orderId
     * @param orderId
     * @param list
     * @return
     */
    List<RatingUnitHistoryBean> queryByOrderIdAndInDeptId(@Param("orderId") String orderId, @Param("list") List<String> list);

    /**
     * 查子节点个数
     *
     * @param orderId
     * @param dataSources
     * @return
     */
    int countChildren(@Param("orderId") String orderId, @Param("dataSources") String dataSources);

    /**
     * 查下级节点标识
     *
     * @param orderId
     * @param parentId
     * @return
     */
    List<String> queryDataSourcesByOrderIdAndParentId(@Param("orderId") String orderId, @Param("parentId") String parentId);

    /**
     * 查询 分页查询 只查询 单位 、单元
     **/
    List<RatingUnitHistoryBean> list(@Param("orderId") String orderId, @Param("deptId") String deptId, @Param("parentId") String parentId, @Param("name") String name);

    /**
     * 根据 设备级 查 部件级
     *
     * @param list     dataSources源单元划分id
     * @param orderId
     * @param deptId
     * @param unitType
     * @return
     */
    List<RatingUnitHistoryVo> queryByParentIdAndOrderIdAndUnitType(@Param("list") List<String> list, @Param("orderId") String orderId, @Param("deptId") String deptId, @Param("unitType") String unitType);


    /**
     * 根据 部件级 查 设备级
     *
     * @param list     ParentId 部件父级id
     * @param orderId
     * @param deptId
     * @param unitType
     * @return
     */
    List<RatingUnitHistoryVo> queryByDataSourcesAndOrderIdAndUnitType(@Param("list") List<String> list, @Param("orderId") String orderId, @Param("deptId") String deptId, @Param("unitType") String unitType);

    /**
     * 评级单id、源id 过滤记录（结果唯一）
     *
     * @param orderId
     * @param dataSources
     * @return
     */
    RatingUnitHistoryBean queryByOrderIdAndDataSources(@Param("orderId") String orderId, @Param("dataSources") String dataSources);

    /**
     * 设备、部件 查询
     *
     * @param dto
     * @return
     */
    List<RatingUnitHistoryVo> queryByAll(RatingUnitHistoryDto dto);

    /**
     * 找出单元、设备、部件的评级个
     *
     * @param orderId
     * @return
     */
    List<RatingGroupCountVo> queryNowGradeByOrderIdAndUnitTypeIn(@Param("orderId") String orderId, @Param("eqIdlist") List<String> eqIdlist);

    /**
     * 找出单元、设备、部件的总数
     *
     * @param orderId
     * @return
     */
    Integer countByOrderIdGroupCount(@Param("orderId") String orderId);

    /**
     * -- 找出单位 对应的 data_sources
     *
     * @param orderId
     * @param equipmentId 单位id
     * @return
     */
    List<RatingUnitHistoryBean> queryByOrderIdAndEquipmentId(@Param("orderId") String orderId, @Param("equipmentId") String equipmentId);


    /**
     * 根据评级单id、是否主要设备、部分路径找 要统计的
     * 注意：只找-设备级
     *
     * @param orderId
     * @param iscore
     * @param likeFullPathCode
     * @return
     */
    List<RatringReportDo> queryByOrderIdAndIscoreAndFullPathCodeLike(@Param("orderId") String orderId, @Param("iscore") Boolean iscore, @Param("likeFullPathCode") String likeFullPathCode);


    /**
     * 查询减少三四类设备 变好
     * @param orderId
     * @return
     */
    List<RatringNewOldVo> gradeComparGood(@Param("orderId")String orderId);

    /**
     * 查询新增三四类设备 变坏
     * @param orderId
     * @return
     */
    List<RatringNewOldVo> gradeComparBad(@Param("orderId")String orderId);


    int deleteByOrderId(@Param("orderId")String orderId);


    /**
     *
     * @param orderId       评级单id
     * @param nowGrade      当前等级
     * @param iscore        是否主要设备
     * @param iscore        是否主要设备
     * @param likeFullPathCode        评级单位
     * @return
     */
    List<RatingUnitHistoryBean> queryByOrderIdAndNowGradeAndIscoreAndFullPathCodeLike(@Param("orderId")String orderId,@Param("nowGrade")Integer nowGrade,@Param("iscore")Boolean iscore,@Param("likeFullPathCode")String likeFullPathCode);



    int updateByOrderId(RatingUnitHistoryBean record);


    List<String> selectByOrderIdAndDeptId(@Param("orderId") String orderId, @Param("list") List<String> deptIds, @Param("unitType") String unitType);

    int selectStaCount(@Param("orderId") String orderId, @Param("deptId") String deptId, @Param("unitType") String unitType);


    List<String> selectByOrderId(@Param("orderId")String orderId);

}
